use pingora::{server::configuration::Opt, services::background::GenBackgroundService};
use proxy::location::Loation;
use proxy::server::*;
use proxy::upstream::{add_upstream, Upstream};

// 需要注意，此为演示代码因此有部分代码直接使用unwrap，正式使用时建议针对错误按正常处理
// RUST_LOG=INFO cargo run --example 前缀匹配location
fn main() {
    env_logger::init();
    // 初始化pingora实例
    let mut instance = pingora::server::Server::new(Some(Opt {
        ..Default::default()
    }))
    .unwrap();
    // 实例启动前的相关初始化
    instance.bootstrap();

    let dev_api_upstream = "dev-api";
    let dev_api = Upstream::new(vec!["127.0.0.1:9527".to_string()]).unwrap();
    instance.add_service(GenBackgroundService::new(
        "diving healt check".to_string(),
        dev_api.lb().clone(),
    ));
    add_upstream(dev_api_upstream, dev_api);

    // 初始化服务，监听地址为：::80
    let server = Server::new(
        "0.0.0.0:80",
        // 需要注意要按权重添加
        vec![Loation::new(
            "/dev-api".to_string(),
            dev_api_upstream.to_string(),
            true,
        )],
    );
    // 添加http服务至当前实例中
    instance.add_service(server.run(&instance.configuration));
    instance.run_forever();
}
